The present invention relates generally to the field of multitask computing, and more particularly to resource allocation and scheduling in multitask computing.
A computing system resource is any component of limited availability which can be used to perform work. Resources may be physical or virtual and may include components such as central processing unit (CPU) time, bytes of random access memory, non-volatile storage space, and network bandwidth. Resources may also be fungible, such as a particular quantity of memory or hard drive space, or non-fungible, such as access to a specific memory location.
A thread is a type of resource that works on completing a job. A thread is a set of instructions that can be managed independently of other sets of instructions with respect to scheduling CPU resources. At a high level, multiple threads can be thought of as able to execute concurrently, whether through actual simultaneous execution on multiple processors or processor cores or through the use of time-division multiplexing on a single processor or core.
A queue is a linearly ordered collection of items. Items are generally added to the back of the queue and removed from its front, and, at least conceptually, there is no limit to the number of items a queue can contain. A job queue is a holding position for work that can be passed off into threads. Every thread in a job queue can work on one job at a time, so a job queue can work on as many jobs at the same time as it has threads allocated to it.